//
// Created by lanlu on 2025/8/11.
//

using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;

    TreeNode() : val(0), left(nullptr), right(nullptr){}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr){}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right){}
};

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        // 走到叶子节点 停止递归
        if (root == nullptr)
            return nullptr;
        if (root->val >= low && root->val <= high) {
            // 在使用递归时 如果有返回结果 需要思考是否要接收结果处理
            root->left = trimBST(root->left, low, high);
            root->right = trimBST(root->right, low, high);
            return root;
        } else if (root->val < low) {
            // 不符合时 当前节点被修剪掉 直接返回可能符合的右子树结果
            return trimBST(root->right, low, high);
        } else {
            return trimBST(root->left, low, high);
        }
    }
};